home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3.2 / Ham Radio Version 3.2 (Chestnut CD-ROMs)(1993).ISO / exam / easyqbe / easyqbe.prg < prev    next >
Text File  |  1985-12-19  |  10KB  |  337 lines

  1. ***************************************************************************
  2. * Program.: EASYQBE.PRG
  3. * Author..: Robert P. Hermans
  4. * Date....: 12/09/85
  5. * Notice..: Donated to the Public Domain
  6. * Version.: dBASE III, version 1.1,Plus,Developer's Version.
  7. * Notes...: Interrogation program for CONTRIB.dbf
  8. *
  9. ***************************************************************************
  10. SET TALK OFF
  11. SET SAFETY OFF
  12.  
  13. STORE ":INTERROGATION:SELECT FROM CONDITIONS BELOW:" to SCREENSAY
  14.  
  15. *  OPEN WORK AREAS WITH NEEDED FILES
  16.  
  17. * PRIMARY FILE TO BE INTERROGATED
  18. SELECT 1
  19. USE CONTRIB.DBF
  20.  
  21. * NOTE:FILE IS USED WITHOUT INDEX.. THIS SPEEDS UP SEQUENTIAL INTERROGATION OF
  22. * FILE...IF NEED IS FOR AN ALPHABETICAL OR SOME OTHER INDEX ORDER LISTING
  23. * SET REQUIRED INDEX(ES) ON.
  24.  
  25. * WORK FILE
  26. SELECT 3
  27. USE SELECT
  28.  
  29. * ZERO THE FILE FROM ANY PREVIOUS INTERROGATIONS
  30. ZAP
  31.  
  32. * CREATE A BLANK RECORD
  33. APPEND BLANK
  34. * NOTE:I HAVE A PREFERENCE FOR USING A FILE AS OPPOSED TO MEMORY VARIABLES
  35. * THIS IS SUBJECTIVE..USE MEMORY VARIABLES IF YOU PREFER
  36.  
  37. * CLEAR THE SCREEN
  38. CLEAR
  39.  
  40. * SET UP A LOOP
  41. DO WHILE .T.
  42.    SET COLOR TO /W
  43.    @  3,40-(LEN(SCREENSAY)/2) SAY SCREENSAY
  44.    SET COLOR TO W/
  45.  
  46.    * INITIATE SEARCH STRING
  47.    S="FOR "
  48.  
  49.    * SET UP AN INPUT FRAME.
  50.    * (THE FOLLOWING WAS DONE WITH VIEWGEN(tm).. [LUIS CASTRO])
  51.    @  4, 7 SAY "==============================================================="
  52.    @  5, 7 SAY "|"
  53.    @  5,69 SAY "|"
  54.    @  6, 7 SAY "|"
  55.    @  6,69 SAY "|"
  56.    @  7, 7 SAY "|"
  57.    @  7,69 SAY "|"
  58.    @  8, 7 SAY "|"
  59.    @  8,69 SAY "|"
  60.    @  9, 7 SAY "|"
  61.    @  9,69 SAY "|"
  62.    @ 10, 7 SAY "|"
  63.    @ 10,69 SAY "|"
  64.    @ 11, 7 SAY "|"
  65.    @ 11,69 SAY "|"
  66.    @ 12, 7 SAY "|"
  67.    @ 12,69 SAY "|"
  68.    @ 13, 7 SAY "|"
  69.    @ 13,69 SAY "|"
  70.    @ 14, 7 SAY "|"
  71.    @ 14,69 SAY "|"
  72.    @ 15, 7 SAY "|"
  73.    @ 15,69 SAY "|"
  74.    @ 16, 7 SAY "|"
  75.    @ 16,69 SAY "|"
  76.    @ 17, 7 SAY "|"
  77.    @ 17,69 SAY "|"
  78.    @ 18, 7 SAY "==============================================================="
  79.    @  5,20 SAY "City OF:"
  80.    @  5,46 SAY "State OF:"
  81.    @  7,13 SAY "Zip-Code GTE:"
  82.    @  7,40 SAY "Zip_Code LTE:"
  83.    @  9,13 SAY "Activity Code (1) OF:"
  84.    @  9,39 SAY "Activity Code (2) OF:"
  85.    @ 11,11 SAY "Contributed YTD GTE:"
  86.    @ 11,39 SAY "Contributed YTD LTE:"
  87.    @ 13,20 SAY "Last Contribution ON or AFTER:"
  88.    @ 15,19 SAY "Last Contribution ON or BEFORE:"
  89.    @ 17,24 SAY "Solicitors NAME:"
  90.    @ 19, 7 SAY "==============================================================="
  91.    @ 20, 7 SAY "|"
  92.    @ 20,69 SAY "|"
  93.    @ 21, 7 SAY "==============================================================="
  94.    @ 20, 8 SAY "LEAVE ALL FIELDS BLANK & PRESS F1 TO EXIT............."
  95.  
  96.  
  97.    * NOW OFFER USER THE INPUT FIELDS
  98.    @  5,28 GET CITY pict "!!!!!!!!!!!!!!!!"
  99.    @  5,55 GET STATE pict "!!"
  100.    @  7,26 GET ZIPGTE pict "99999X9999"
  101.    @  7,53 GET ZIPLTE pict "99999X9999"
  102.    @  9,34 GET ACT_1 pict "!!!"
  103.    @  9,60 GET ACT_2 pict "!!!"
  104.    @ 11,31 GET YR_TO_DGTE pict "9999.99"
  105.    @ 11,59 GET YR_TO_DLTE pict "9999.99"
  106.    @ 13,52 GET DATEGTE
  107.    @ 15,52 GET DATELTE
  108.    @ 17,40 GET SOLICITOR pict "!!!!!!!!!!!!!!!"
  109.    READ
  110.    CLEAR GETS
  111.  
  112.  
  113.    * NOW CHECK THE USER ENTRY AND START BUILDING THE INTERROGATION PARAMETERS
  114.  
  115.    * NOTE THAT '.AND.' IS TAGGED ONTO THE END OF EACH INTERROGATION PARAMETER
  116.    * AND IS TRIMMED (SEE BELOW) BEFORE THE INTERROGATION COMMENCES.
  117.  
  118.    * RECALL THAT THE VARIABLE 'S'= 'FOR'.
  119.  
  120.    * IF THE USER INPUT A CITY
  121.    IF CITY <> " "
  122.       S=S+"UPPER(CITY)="+"'"+TRIM(CITY)+"'.AND."
  123.       * NOTE THAT THE PICTURE INPUT IS UPPER CASE AND THE SEARCH PARAMETER
  124.       * IS UPPER CASE...
  125.    ENDIF
  126.  
  127.    * IF THE USER INPUT A STATE
  128.    IF STATE <> " "
  129.       S=S+"STATE='"+STATE+"'.AND."
  130.    ENDIF
  131.  
  132.    * IF USER INPUT A ZIP CODE GTE (>=)
  133.    IF VAL(ZIPGTE) <> 0
  134.       S=S+"TRIM(ZIP)>='"+TRIM(ZIPGTE)+"'.AND."
  135.    ENDIF
  136.  
  137.    * IF USE INPUT A ZIP CODE LTE (<=)
  138.    IF VAL(ZIPLTE) <> 0
  139.       S=S+"TRIM(ZIP)<='"+TRIM(ZIPLTE)+"'.AND."
  140.    ENDIF
  141.  
  142.    * IF USER ENTERED ACTIVITY CODE 1 DATA
  143.    IF ACT_1 <> " "
  144.       S=S+"ACT_1='"+ACT_1+"'.AND."
  145.    ENDIF
  146.  
  147.    * IF USER ENTERED ACTIVITY CODE 2 DATA
  148.    IF ACT_2 <> " "
  149.       S=S+"ACT_2='"+ACT_2+"'.AND."
  150.    ENDIF
  151.  
  152.    * IF USER ENTERED AN AMOUNT GTE
  153.    IF YR_TO_DGTE > 0
  154.       S=S+"YR_TO_DATE>="+STR(YR_TO_DGTE,7,2)+" .AND."
  155.    ENDIF
  156.  
  157.    * IF USER ENTERED AN AMOUNT LTE
  158.    IF YR_TO_DLTE> 0
  159.       S=S+"YR_TO_DATE<="+STR(YR_TO_DLTE,7,2)+" .AND."
  160.    ENDIF
  161.  
  162.    * IF A 'BEFORE DATE' WAS ENTERED
  163.    IF LEN(TRIM(DTOC(DATEGTE))) =8
  164.       S=S+"DATE>=CTOD('"+DTOC(DATEGTE)+"') .AND."
  165.    ENDIF
  166.  
  167.    * IF AN `AFTER DATE' WAS ENTERED
  168.    IF LEN(TRIM(DTOC(DATELTE))) =8
  169.       S=S+"DATE<=CTOD('"+DTOC(DATELTE)+"') .AND."
  170.    ENDIF
  171.  
  172.    * AND THE FINAL INPUT FIELD, IF THE USER ENTERED A SOLICTOR
  173.    IF SOLICITOR <> " "
  174.       S=S+"UPPE(SOLICITOR)='"+TRIM(SOLICITOR)+"'.AND."
  175.    ENDIF
  176.  
  177.    *  NOW THAT ALL USER INPUT FIELDS HAVE BEEN READ, CHECK TO SEE IF USER
  178.    *  INPUT ANY DATA..RECALL THAT ALL FIELDS BLANK MEANS 'EXIT'
  179.    IF LEN(TRIM(S))=3
  180.       * i.e. If 'S' = "FOR" USER DID NOT ENTER ANYTHING IN ANY FIELDS
  181.       CLOSE DATA
  182.       CLEAR
  183.       RETURN
  184.    ENDIF
  185.  
  186.    * OTHERWISE THE USER MUST HAVE ENTERED DATA.
  187.    * SO TRIM OFF THE '.AND.' WHICH IS ON THE END OF EACH PARAMETER
  188.    STORE SUBSTR(S,1,(LEN(S)-5)) TO SELECTOR
  189.  
  190.    * GIVEN THE 250 CHARACTER LINE LIMIT CHECK THAT THE LINE DOES NOT EXCEED
  191.    * 220.....220 IS USED AS THE MACRO WILL BECOME PART OF A LONGER SYNTAX
  192.    * STRING BELOW.
  193.  
  194.    IF LEN(TRIM(SELECTOR)) > 220
  195.       WAIT "TOO MANY CONDITIONS SELECTED !..PRESS ANY KEY AND REVISE......."
  196.       CLEAR
  197.       LOOP
  198.    ENDIF
  199.    **
  200.  
  201.    * WE NOW HAVE A VALID SEARCH STRING MACRO 'SELECTOR' SO OFFER THE USER 
  202.    * THE ABILITY TO REDIRECT OR COUNT THE NUMBER OF RECORDS SATISFYING 
  203.    * THE PARAMETERS ENTERED.
  204.  
  205.  
  206.    * HERE'S WHERE THE ACTUAL INTERROGATION GOES......
  207.    * USE WILL SELECT LIST TO SCREEN, COPY TO WORDSTAR, OR TO A DBASE OR
  208.    * PROGRAMMER GENERATED REPORT...
  209.  
  210.    CLEAR
  211.  
  212.    *SET UP A LOOP
  213.    STORE .T. TO INTEROGATE
  214.    DO WHILE INTEROGATE
  215.       CLEAR
  216.       SET COLOR TO /W
  217.       @  3,40-(LEN(SCREENSAY)/2) SAY SCREENSAY
  218.       SET COLOR TO W/
  219.       STORE "?" TO CHOICE
  220.  
  221.  
  222.       * OFFER THE USER A CHOICE...OBVIOUSLY THESE CHOICES COULD BE EXPANDED OR
  223.       * MODIFIED TO INCLUDE A LABEL FILE OR TRANSFER OF .DBF DATA TO ANOTHER
  224.       * .DBF FILE OR 1-2-3 OR OTHER PROGRAM.
  225.  
  226.       @  7,18 SAY "PLEASE SELECT YOUR CHOICE:"
  227.       @  9,18 SAY "C)OUNT THE NUMBER OF CONTRIBUTORS SELECTED"
  228.       @ 10,18 SAY "L)IST THE SELECTED CONTRIBUTORS TO THE SCREEN"
  229.       @ 11,18 SAY "R)EPORT OF THE SELECTED CONTRIBUTORS"
  230.       @ 12,18 SAY "W)ORDSTAR FILE OF THE SELECTED CONTRIBUTORS"
  231.       @ 13,18 SAY "Q)UIT & ABORT THIS INTERROGATION"
  232.       DO WHILE .NOT. CHOICE $ "CLRWQ"
  233.          @ 15,18 SAY "C)OUNT - L)IST - R)EPORT - W)ORDSTAR - Q)UIT?" GET ;
  234.          CHOICE PICT "!"
  235.          READ
  236.          CLEAR GETS
  237.       ENDDO GET CHOICE
  238.  
  239.       * USE A CASE TO EXECUTE THE DESIRED INTERROGATIONS UNTIL USER
  240.       * SELECTS 'Q' TO QUIT INTERROGATION.......
  241.  
  242.       DO CASE
  243.  
  244.          CASE CHOICE = "Q"
  245.             EXIT
  246.             * THIS WILL REFRESH SCREEN FOR NEW INTERROGATION PARAMETERS
  247.             * OR EXIT TO CALLING PROGRAM OR SYSTEM.
  248.  
  249.          CASE CHOICE = "L"
  250.             * LIST TO SCREEN - THIS PROGRAM USES A DBASE III REPORT FORM
  251.             * COULD ALSO USE 'DISPLAY FOR &SELECTOR'
  252.  
  253.             * SELECT PRIMARY FILE AREA
  254.             * NOTE THAT AN INDEX COULD BE USED TO PROVIDE AN ORDERED LISTING
  255.             * OR DISPLAY...IT WILL, HOWEVER, SLOW DOWN EXECUTION
  256.             SELECT 1
  257.  
  258.             * ERASE THE SCREEN AND TELL USER HOW TO PAUSE THE DISPLAY
  259.             CLEAR
  260.             ? "USE CTRL+'S' TO PAUSE AND RESUME THE SCREEN DISPLAY"
  261.             WAIT
  262.             REPO FORM SUBMAIN5 PLAIN &SELECTOR
  263.             ? "THAT'S ALL OF THE RECORDS....................."
  264.             WAIT
  265.  
  266.             * SELECT WORK FILE AREA
  267.             SELECT 3
  268.             LOOP
  269.  
  270.          CASE CHOICE = "C"
  271.             * MEANS USER WANTS TO COUNT THE NUMBER OF RECORDS SATISFYING
  272.             * THE PARAMTERS ENTERED........
  273.             * SELECT THE PRIMARY FILE AREA
  274.  
  275.             SELECT 1
  276.             COUNT TO NUMSELECT &SELECTOR
  277.  
  278.             * CLEAR THE SCREEN AND TELL THE USER HOW MANY RECORDS
  279.             CLEAR
  280.             ? "THE NUMBER OF RECORDS SELECTED IS:"+STR(NUMSELECT,5)
  281.             WAIT
  282.  
  283.             * RETURN TO WORK FILE AREA
  284.             SELECT 3
  285.             LOOP
  286.  
  287.          CASE CHOICE= "R"
  288.             * USER WANTS A REPORT
  289.             CLEAR
  290.             WAIT "PLEASE READY THE PRINTER.. PRESS ANY KEY WHEN READY ;
  291. OR 'Q' TO QUIT" TO WHAT
  292.             IF UPPER(WHAT)="Q"
  293.                LOOP
  294.             ENDIF
  295.  
  296.             * PRINT THE REPORT
  297.             SET CONSOLE OFF
  298.             SELECT 1
  299.             REPO FORM SUBMAIN3 TO PRINT &SELECTOR
  300.             SET CONSOLE ON
  301.  
  302.             * RETURN TO WORK FILE AREA
  303.             SELECT 3
  304.             CLEAR
  305.             LOOP
  306.  
  307.  
  308.          CASE CHOICE = "W"
  309.             * USER WANTS A MERGE FILE - FOLLOWING IS FOR WORDSTAR (tm)
  310.             * ADAPT DELIMITERS ACCORDING TO MERGE PROGRAM REQUIREMENTS
  311.  
  312.             SELECT 1
  313.             COPY TO MERGE.TXT DELI WITH " &SELECTOR
  314.  
  315.             * TELL USER THE NAME OF THE '.TXT' FILE (NOTE PROGRAM COULD BE
  316.             * MODIFIED FOR USER INPUT OF FILE NAME)
  317.  
  318.             CLEAR
  319.             ? "SELECTED RECORDS(IF ANY) HAVE BEEN COPIED TO A WORDSTAR FILE ;
  320. 'MERGE.TXT'"
  321.             WAIT
  322.  
  323.             * RETURN TO WORK FILE AREA
  324.             SELECT 3
  325.             LOOP
  326.  
  327.       ENDCASE
  328.  
  329.    ENDDO INTRGATE
  330.    * MOVE TO WORK FILE AREA AND RESET THE FILE FOR THE NEXT INTERROGATION(IF)]
  331.    SELECT 3
  332.    ZAP
  333.    APPE BLANK
  334.    CLEAR
  335. ENDDO
  336. * EOF EASYQBE.PRG
  337.